package com.tuit.ar.api;
import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
public class Avatar extends Request {
static private HashMap<String, Avatar> cache = new HashMap<String, Avatar>();
static final private int MAX_CACHE_SIZE = 20;
protected String url;
protected Bitmap response = null;
private ArrayList<AvatarObserver> observers = new ArrayList<AvatarObserver>();
static public Avatar get(String url) {
if (cache.containsKey(url)) return cache.get(url);
return new Avatar(url);
}
protected Avatar(String url) {
int cacheToPurge = cache.size() - MAX_CACHE_SIZE + 1; // Not adding the current one yet.
if (cacheToPurge > 0) {
for (String _url : cache.keySet()) {
cache.remove(_url);
if (--cacheToPurge <= 0) break;
}
}
cache.put(url, this);
this.url = url;
}
public void addRequestObserver(AvatarObserver observer) {
observers.add(observer);
}
public void removeRequestObserver(AvatarObserver observer) {
observers.remove(observer);
}
public void download() {
if (response != null) {
finishedRequest();
return;
}
(new Thread() {
public void run() {
DefaultHttpClient http = new DefaultHttpClient();
HttpRequestBase request = new HttpGet(url);
final HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, "UTF_8");
HttpProtocolParams.setUseExpectContinue(params, false);
http.setParams(params);
try {
HttpResponse response = http.execute(request);
HttpEntity resEntity = response.getEntity();
int statusCode = (response.getStatusLine().getStatusCode());
if (resEntity != null && statusCode >= 200 && statusCode < 300)
{
ByteArrayOutputStream output = new ByteArrayOutputStream();
resEntity.writeTo(output);
byte[] bytes = output.toByteArray();
setResponse(BitmapFactory.decodeByteArray(bytes, 0, bytes.length));
}
} catch (Exception e) {
}
handler.post(runnable);
}
}).start();
}
protected void setResponse(Bitmap response) {
this.response = response;
}
public Bitmap getResponse() {
return this.response;
}
@SuppressWarnings("unchecked")
@Override
protected void finishedRequest() {
if (response == null) {
requestFailed();
return;
}
ArrayList<AvatarObserver> observers = (ArrayList<AvatarObserver>) this.observers.clone();
for (AvatarObserver observer : observers) {
observer.avatarHasFinished(this);
}
}
@SuppressWarnings("unchecked")
protected void requestFailed() {
ArrayList<AvatarObserver> observers = (ArrayList<AvatarObserver>) this.observers.clone();
for (AvatarObserver observer : observers) {
observer.avatarHasFailed(this);
}
}
}